#ifndef I_SHADER_PROGRAM
#define I_SHADER_PROGRAM
#include "EngineMath.h"
namespace gengine
{
	namespace kernel
	{
		
	enum ShaderProgramType
	{
			GLSL_SHADER,
			CG_SHADER
	};
	class IShaderProgram
	{
	public:
	virtual bool        SetConstant  ( const char * name, const Vector4D& value  ) = 0;
   // virtual bool        SetConstant  ( int loc,            const Vector4D& value ) = 0;
    virtual bool        SetConstant  ( const char * name, const Vector3D& value  ) = 0;
  //  virtual bool        SetConstant  ( int loc,            const Vector3D& value ) = 0;
    virtual bool        SetConstant  ( const char * name, const Vector2D& value  ) = 0;
   // virtual bool        SetConstant  ( int loc,            const Vector2D& value ) = 0;
    virtual bool        SetConstant  ( const char * name, float value            ) = 0;
   // virtual bool        SetConstant  ( int loc,            float value           ) = 0;
    virtual bool        SetConstant  ( const char * name, const Matrix4x4& value ) = 0;
    virtual bool        SetConstant  ( const char * name, const Matrix3D&  value ) = 0;
    virtual bool        SetConstant  ( const char * name, float value [16]       ) = 0;
    virtual bool        SetConstant  ( const char * name, int value              ) = 0;
	virtual ShaderProgramType  GetProgramType() const                              = 0;
   // virtual bool        SetConstant   ( int loc,          int value              ) = 0;
	};
	}
}
#endif